﻿using System;
using MEFAddin.Adapters;
using MEFAddin.Enums;

namespace MEFAddin.Interfaces
{
    public delegate void AddInMessageEvent(object sender, string message, MessageType messageType);

    public interface IAddInController
    {
        IAddInAdapter AddInAdapter { get; }

        void Initialize(AddInContext addinCtx, IAddInAdapter addinAdapter);

        void Exec(string CmdName, EnvDTE.vsCommandExecOption ExecuteOption, ref object VariantIn, ref object VariantOut, ref bool Handled);

        void OnAddInsUpdate(ref Array custom);

        void OnBeginShutdown(ref Array custom);

        void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref Array custom);

        void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref Array custom);

        void OnStartupComplete(ref Array custom);

        void QueryStatus(string CmdName, EnvDTE.vsCommandStatusTextWanted NeededText, ref EnvDTE.vsCommandStatus StatusOption, ref object CommandText);
    }
}
